package com.redepronik.negosysdis.rrhh.controller;

import static com.redepronik.negosys.utils.Utils.redondear;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.redepronik.negosys.rrhh.entity.Precio;
import com.redepronik.negosys.rrhh.service.PrecioService;

@Controller
@Scope("session")
public class PrecioBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@Autowired
	private PrecioService precioService;

	private List<Precio> listaPrecios;
	private Precio precio;

	public PrecioBean() {
		listaPrecios = new ArrayList<Precio>();
		precio = new Precio();
	}

	public void actualizar(ActionEvent actionEvent) {
		String mensaje = precioService.actualizar(precio);
		mensaje(mensaje, "ACTUALIZÓ");
	}

	public void eliminar(ActionEvent actionEvent) {
		precioService.eliminar(precio);
		if (precio.getActivo())
			presentaMensaje(new FacesMessage(FacesMessage.SEVERITY_INFO,
					"ACTIVO", "PRECIO: " + precio.getNombre()));
		else
			presentaMensaje(new FacesMessage(FacesMessage.SEVERITY_INFO,
					"DESACTIVO", "PRECIO: " + precio.getNombre()));
	}

	public List<Precio> getListaPrecios() {
		listaPrecios = precioService.obtener(null);
		for (Precio p : listaPrecios) {
			p.setPorcentaje(redondear(p.getPorcentaje()));
		}
		return listaPrecios;
	}

	public Precio getPrecio() {
		return precio;
	}

	public void insertar(ActionEvent actionEvent) {
		String mensaje = precioService.insertar(precio);
		mensaje(mensaje, "INSERTÓ");
	}

	public void limpiar() {
		precio = new Precio();
	}

	private void mensaje(String mensaje, String titulo) {
		RequestContext context = RequestContext.getCurrentInstance();
		if (mensaje.compareTo("SAVE") == 0) {
			presentaMensaje(new FacesMessage(FacesMessage.SEVERITY_INFO,
					titulo, "Precio: " + precio.getNombre()));
			context.addCallbackParam("error", true);
			limpiar();
		} else {
			presentaMensaje(new FacesMessage(FacesMessage.SEVERITY_INFO,
					"ERROR", mensaje));
			context.addCallbackParam("error", false);
		}
	}

	private void presentaMensaje(FacesMessage message) {
		FacesContext.getCurrentInstance().addMessage(null, message);
	}

	public void setListaPrecios(List<Precio> listaPrecios) {
		this.listaPrecios = listaPrecios;
	}

	public void setPrecio(Precio precio) {
		this.precio = precio;
	}

}
